package com.zzy.aop.version2;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class AOPTest {
    public static void main(String[] args) throws NoSuchMethodException, ClassNotFoundException, InvocationTargetException, IllegalAccessException {

        /**
         * 为什么要new一个AOPBean对象，而不是在AOP的aopOperation方法中通过Class对象生成？
         *      个人考虑：因为AOPBean对象实例可能在方法调用前进行一系列处理，保存一定的信息，
         *              如果通过Class对象生成，会造成保存的信息丢失
         */
        AOPBean aopBean = new AOPBean();

        //AOPBean.class.getName() 返回值为AOPBean的全路径 com.zzy.aop.version2.AOPBean
//        System.out.println(AOPBean.class.getName());

        /**
         * 验证场景：
         *  1.无AOPAnno注解标识 ===> 不执行任何方法
         *  2.类上使用AOPAnno注解标识 ===> 执行类中所有方法
         *  3.指定方法上使用AOPAnno注解标识 ===> 执行注解标识的方法
         */
        AOP.aopOperation(AOPBean.class.getName(),aopBean);
    }
}
